/**
 * 
 */
package santeclair.referentiel.optique.tarification.webservice.impl;

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.cxf.feature.Features;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import santeclair.referentiel.dto.RetourWebServiceDto;
import santeclair.referentiel.optique.model.TraitementVerre;
import santeclair.referentiel.optique.model.TypeTraitementVerre;
import santeclair.referentiel.optique.referentiel.service.TraitementVerreService;
import santeclair.referentiel.optique.referentiel.service.TypeTraitementVerreService;
import santeclair.referentiel.optique.tarification.dto.traitement.CodeTypeTraitementDto;
import santeclair.referentiel.optique.tarification.dto.traitement.TraitementVerreDonneesDto;
import santeclair.referentiel.optique.tarification.dto.traitement.TraitementVerreDto;
import santeclair.referentiel.optique.tarification.dto.traitement.TypeTraitementVerreDto;
import santeclair.referentiel.optique.tarification.webservice.TraitementVerreWebService;

/**
 * @author cquintin
 * 
 */
@Service
@Features(features = "org.apache.cxf.feature.LoggingFeature")
public class TraitementVerreWebServiceImpl implements TraitementVerreWebService {
    private static final Logger LOGGER = LoggerFactory.getLogger(TraitementVerreWebServiceImpl.class);

    @Autowired
    private TraitementVerreService traitementVerreService;

    @Autowired
    private TypeTraitementVerreService typeTraitementVerreService;

    /**
     * {@inheritDoc}
     */
    @Override
    public TraitementVerreDto getTraitement(String code) {
        try {
            TraitementVerre traitementVerre = traitementVerreService.getTypeTraitement(code);
            TraitementVerreDonneesDto traitementVerreDonneesDto = new TraitementVerreDonneesDto();
            traitementVerreDonneesDto.setCodefflTraitementVerre(traitementVerre.getCodefflTraitementVerre());
            traitementVerreDonneesDto.setCodeTraitementVerre(traitementVerre.getCodeTraitementVerre());
            traitementVerreDonneesDto.setIdentifiantTraitementVerre(traitementVerre.getIdentifiantTraitementVerre());
            traitementVerreDonneesDto.setLibellefflTraitementVerre(traitementVerre.getLibellefflTraitementVerre());
            traitementVerreDonneesDto.setLibelleTraitementVerre(traitementVerre.getLibelleTraitementVerre());

            TypeTraitementVerre typeTraitementVerre = traitementVerre.getTypeTraitementVerre();

            TypeTraitementVerreDto typeTraitementVerreDto = new TypeTraitementVerreDto();
            typeTraitementVerreDto.setCodeOpto10TypeTraitementVerre(typeTraitementVerre.getCodeOpto10());
            typeTraitementVerreDto.setCodeTypeTraitementVerre(typeTraitementVerre.getCode());
            typeTraitementVerreDto.setIdentifiantTypeTraitementVerre(typeTraitementVerre.getIdentifiant());
            typeTraitementVerreDto.setLibelleTypeTraitementVerre(typeTraitementVerre.getLibelle());

            traitementVerreDonneesDto.setTypeTraitementVerre(typeTraitementVerreDto);

            return new TraitementVerreDto(traitementVerreDonneesDto);
        } catch (Exception e) {
            LOGGER.warn(ExceptionUtils.getStackTrace(e), e);
            return new TraitementVerreDto(new RetourWebServiceDto(e.getMessage()));
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public CodeTypeTraitementDto getCodeTypeTraitementByCodeOpto10FabricantSupplement(String codeOpto10FabricantOptique, String codeOpto10DistributeurOptique,
                    String codeOpto10SupplementVerre) {
        try {
            String codetypetraitement = typeTraitementVerreService
                            .getCodeTypeTraitementByCodeOpto10FabricantSupplement(codeOpto10FabricantOptique, codeOpto10DistributeurOptique, codeOpto10SupplementVerre);
            return new CodeTypeTraitementDto(codetypetraitement);
        } catch (Exception e) {
            LOGGER.warn(ExceptionUtils.getStackTrace(e), e);
            return new CodeTypeTraitementDto(new RetourWebServiceDto(e.getMessage()));
        }

    }

}
